void GenFlow (ImSize, Alpha, ExIm,EyIm,EtIm, Un1,Vn1, Un,Vn)
int ImSize, Alpha;
int ** ExIm;
int ** EyIm;
int ** EtIm;
float ** Un1;
float ** Vn1;
float ** Un;
float ** Vn;
{
   int    r,c, Ex,Ey,Et, Alpha2;
   float  u,v, um,vm, a,b;

   for (r=0; r<ImSize; r++) {
      for (c=0; c<ImSize; c++) {
         Un[r][c] = Un1[r][c];
         Vn[r][c] = Vn1[r][c];
   }  }
   Alpha2 = Alpha*Alpha;

   for (r=1; r<ImSize-1; r++) {
      for (c=1; c<ImSize-1; c++) {
         um = (Un[r-1][c]  + Un[r][c+1]  + Un[r+1][c]  + Un[r][c-1])   /6 +
              (Un[r-1][c-1]+ Un[r-1][c+1]+ Un[r+1][c+1]+ Un[r+1][c-1]) /12;
         vm = (Vn[r-1][c]  + Vn[r][c+1]  + Vn[r+1][c]  + Vn[r][c-1])   /6 +
              (Vn[r-1][c-1]+ Vn[r-1][c+1]+ Vn[r+1][c+1]+ Vn[r+1][c-1]) /12;

         Ex = ExIm[r][c];
         Ey = EyIm[r][c];
         Et = EtIm[r][c];

         a = Ex*um + Ey*vm + Et;
         b = (float)Alpha2 + Ex*Ex + Ey*Ey;
         u = um - (Ex*a)/b;
         v = vm - (Ey*a)/b;
 
         Un1[r][c] = u;
         Vn1[r][c] = v;
}  }  }
